home *** CD-ROM | disk | FTP | other *** search
- OSC TITLE '(PEP/CMS) - COPY OS DISK/TAPE FILE TO CMS DISK' 00000010
- *********************************************************************** 00000020
- * COPYRIGHT (C) 1981, 1989 BY J.F. CHANDLER AND P.G. FORD * 00000030
- * PERMISSION IS HEREBY GRANTED TO USE OR COPY THIS PROGRAM, EXCEPT * 00000040
- * FOR EXPLICITLY COMMERCIAL PURPOSES. * 00000050
- *********************************************************************** 00000060
- PRINT NOGEN 00000070
- SPROSC START X'20000' USER-PROGRAM AREA EXECUTION 00000080
- SPACE 1 00000090
- *---------------------------------------------------------------------- 00000100
- * JFC/PGF - 1981 JAN 00000110
- * 00000120
- * COMMAND FORMAT: 00000130
- * 00000140
- * SPROSC TAP<N> <FILEID> ( <OPTIONS> 00000160
- * 00000171
- * "FILEID" MAY BE GIVEN AS "= =" TO REQUEST USING A 00000172
- * NAME DERIVED FROM THE DSN ON TAPE, OR AS "= = <FM>" 00000173
- * TO SELECT A SPECIFIC FILEMODE AS WELL. WITH MULTI- 00000174
- * FILE READS, ALL FILES AFTER THE FIRST ARE NAMED 00000175
- * FROM THE TAPE DSN. 00000176
- * 00000180
- * OPTIONS: (SPECIFY FOR LABEL=NL TAPE FILES 00000190
- * 00000210
- * BLOCK <N> - DEFAULT 32756 00000220
- * LRECL <N> - DEFAULT 80 00000230
- * RECFM <T> - F, FB, V, VB, VS, VBS, U, D (+ A) 00000240
- * ASCII - TRANSLATE FROM ASCII 00000250
- * EBCDIC - DO NOT TRANSLATE FROM ASCII 00000260
- * NL (<N>) - UNLABELED, DESIRED TAPE FILE 00000270
- * 00000280
- * (SPECIFY FOR LABEL=SL TAPE FILES ONLY) 00000290
- * 00000300
- * DSN <C> - CHECK LAST 17 BYTES AGAINST DSNAME 00000310
- * (MUST BE LAST OPTION) 00000320
- * VOL <C> - CHECK AGAINST TAPE VOLUME SERIAL 00000330
- * SL (<N>) - LABELED, DESIRED TAPE FILE 00000340
- * EOF <N> - NUMBER OF TAPE FILES TO COPY 1.1 00000350
- * EOT - COPY TILL END OF TAPE 1.1 00000360
- * PREFIX <XX>- SELECT ONLY FILES BEGINNING XX 1.4 00000365
- * 00000370
- * (GENERAL OPTIONS) 00000380
- * 00000390
- * FILE <N> - DESIRED TAPE FILE 00000400
- * REBLOCK <N>- REPACK A VB OR VBS FILE 1.3 00000410
- * 00000411
- * EXAMPLE: SPROSC TAP1 = = (EOF 217 PREFIX IK 00000412
- * LOAD ALL FILES WITH NAMES BEGINNING "IK" FROM AMONG THE NEXT 217 00000413
- * FILES ON TAPE 181. IF THE TAPE IS ANSI, THE FILES WILL BE TRANS- 00000414
- * LATED INTO EBCDIC. IF THE TAPE IS NOT LABELED, SPROSC WILL HALT. 00000415
- * 00000416
- * 00000420
- * R E G I S T E R A S S I G N M E N T S 00000430
- * 00000440
- * 2 BUFFER PTR OR ZERO 00000450
- * 3 PLIST ITEM DURING SCAN (SETUP OR TAPE LABEL) 00000460
- * 4,5,6 SCRATCH 00000470
- * 7 FILE SKIP COUNT 00000480
- * 8 INTERNAL LINKAGE 00000490
- * 9 BLOCK COPY COUNT 00000500
- * 10 SECOND PROGRAM BASE REGISTER 00000510
- * 11 BASE FOR AUX. STORAGE 00000520
- * 12 FIRST BASE REGISTER (ORIGIN OF PGM) 00000530
- * 00000540
- * EXTERNAL REFERENCES: 00000550
- * (CMS MACROS) 00000560
- * DMSFREE DMSFRET DMSKEY FSCLOSE FSERASE FSWRITE 00000580
- * LINEDIT NUCON REGEQU WRTERM 00000590
- * 00000640
- * 00000670
- * UPDATE HISTORY: 00000680
- * 1981 JAN - VERSION 1.0 00000690
- * 1986 DEC - VERSION 1.1 - MULTI-FILE READS, CMS UNBLOCKING, 00000700
- * VMS-STYLE PADDED RECORDS + CAR.CTRL. 00000710
- * 1989 JUN - VERSION 1.2 - MULTI-VOL FILES, TAPE LABEL TOLERANCE 00000720
- * 1990 OCT - VERSION 1.3 - ALLOW 1-LEVEL TAPE DSNAMES, IMPLEMENT 00000730
- * REBLOCK, PERSISTENT FM NUMBER, CLOSE 00000740
- * FILES, RECOGNIZE VOL2-HDR3-HDR4 00000750
- * 1991 JAN - VERSION 1.4 - ALLOW TAPE SEARCH BY FILE NAME 00000755
- * 00000760
- *---------------------------------------------------------------------- 00000770
- *------------------------------------------------------ LINKAGE, USINGS 00000780
- USING *,R12,R10 PROGRAM BASES 00000790
- USING NUCON,R0 ADDRESS PAGE 0 00000800
- LR R12,R15 LOAD PROGRAM BASE 00000810
- B BEGIN 00000820
- VERSION DC C'SPROSC 1.4-NODD' 1.4 00000835
- BEGIN DS 0H 00000840
- LA R10,2048(,R12) PREPARE SECOND BASE 00000850
- LA R10,2048(,R10) GOT IT 00000860
- ST R14,SAVER14 SAVE RETURN ADDRESS 00000870
- LR R3,R1 SAVE POINTER TO PLIST 00000880
- SPACE 1 00000890
- *------------------------------------------------------ CLEAR FLAGS ETC 00000900
- XR R2,R2 CLEAR R2 TO INDICATE NO BUFFER YET 00000910
- XR R11,R11 CLEAR AUX STORAGE PTR 00000920
- LA R0,LSTOR 00000930
- DMSFREE DWORDS=(0),ERR=ERR283 GET STORAGE AREA 00000940
- ST R1,STOPTR SAVE PTR (ALSO ADR OF TLGBUF) 00000950
- LR R11,R1 00000960
- USING STOR,R11 00000970
- XC ZSTUF(ZLEN),ZSTUF CLEAR FLAGS, ETC. 00000980
- MVI OUTFM,C'A' SET DEFAULT FILEMODE 00000990
- BAL R8,SETUP1 INIT. A FEW THINGS 00001000
- MVC FINDCNT,=H'5' MAX. NUMBER OF LABEL RETRIES 00001010
- MVI PRFSTR,C' ' INITIALIZE 1.4 00001015
- SPACE 1 00001020
- *------------------------------------------------------ GET DDNAME/TAPN 00001030
- BAL R8,PRMCHK CHECK FOR DDNAME/TAPN 00001040
- OI FLG,XXPM1 SIGNAL DDNAME PRESENT 00001050
- CLI 0(R3),C'?' JUST ASKING FOR VERSION? 00001060
- BNE CPYDDN NO, CONTINUE 00001070
- WRTERM VERSION,L'VERSION 00001080
- B EXIT 00001090
- CPYDDN DS 0H 00001100
- MVC DDNAME,0(R3) AND TO DDNAME 00001110
- CLC =C'TAP0',DDNAME 'TAPN' DEVICE? 00001120
- BH NOTTAP NO 00001130
- CLC =C'TAP9',DDNAME TRY AGAIN 00001140
- BL NOTTAP NO 00001150
- CLI DDNAME+4,C' ' ONE LAST TEST 00001160
- BNE NOTTAP NO - NOT 'TAPN' 00001170
- SPACE 1 00001180
- *------------------------------------------------------------ IT'S TAPN 00001190
- MVC TAPDEV,DDNAME COPY TAPE DEVICE CODE 00001210
- MVC DCBBLKSI,=AL2(32756) SET DEFAULT 00001220
- MVC DCBLRECL,=AL2(80) ... 00001230
- MVI DCBRECFM,DCBRECU 00001240
- SPACE 1 00001320
- *---------------------------------------------------------------------- 00001330
- *---------------------------------------------------- GET OUTPUT FILEID 00001340
- BAL R8,PRMCHK CHECK FOR FILENAME 00001360
- OI FLG,XXPM2 OK, SIGNAL BOTH THERE 00001370
- MVC OUTFN(16),0(R3) PRESENT, SO COPY NAME/TYPE 00001380
- BAL R8,PRMCHK CHECK FOR FILETYPE 00001390
- BAL R8,PRMCHK CHECK FOR FILEMODE 00001400
- MVC OUTFM(1),0(R3) YES, COPY FILEMODE 00001410
- CLI 1(R3),C' ' FILEMODE NUMBER? 00001420
- BE NOMODE NO 00001430
- MVC OUTFM+1(1),1(R3) YES, COPY IT 00001440
- MVC CMDFMN,1(R3) SAVE INDEFINITELY 1.3 00001450
- OI FLG2,XXFMN REMEMBER IT 1.1 00001460
- CLI 2(R3),C' ' LEGAL FILEMODE? 00001470
- BNE ERR098 GO WRITE MESSAGE 00001480
- NOMODE DS 0H 00001490
- BAL R8,PRMCHK ANYTHING FOLLOWING? 00001500
- B ERR098 YES - ERROR 00001510
- SPACE 1 00001520
- *--------------------------------------------CHECK NEXT PARAMETER TOKEN 00001530
- PRMCHK LA R3,8(R3) MOVE TO NEXT POSSIBLE PARAMETER 00001540
- CLI 0(R3),X'FF' ANYTHING FOLLOWING? 00001550
- BE ENDOPT NO, DONE SCANNING 00001560
- CLI 0(R3),C'(' START OF OPTIONS? 00001570
- BNER R8 NOT YET, RETURN 00001580
- SPACE 1 00001590
- *-------------------------------------------------------- PARSE OPTIONS 00001600
- * NOTE: THIS CODE IS USED ALSO FOR INTERPRETING THE 00001610
- * DCB INFORMATION ON TAPE LABELS; (R2) THEN CONTAINS 00001620
- * THE READ BUFFER ADDRESS AND MUST BE PRESERVED 00001630
- SPACE 1 00001640
- OPTLOOP DS 0H 00001650
- LA R3,8(,R3) POINT TO NEXT OPTION 00001660
- CLI 0(R3),X'FF' END OF PLIST? 00001670
- BE ENDOPT YES 00001680
- CLI 0(R3),C')' END OF OPTIONS? 00001690
- BE ENDOPT YES 00001700
- LA R4,LOPTTAB LENGTH OF TABLE ITEM 00001710
- LA R5,OPTTAB2 POINT TO LAST ENTRY 00001720
- LA R6,OPTTAB1 POINT TO FIRST ENTRY 00001730
- LA R1,7(,R3) POINT TO LAST CHAR OF TOKEN 00001740
- CLI 0(R1),C' ' FIND LAST NON-BLANK 00001750
- BNE *+8 FOUND IT 00001760
- BCT R1,*-8 KEEP LOOKING 00001770
- SR R1,R3 GET TOKEN LENGTH - 1 00001780
- OPTSCAN DS 0H 00001790
- CLM R1,1,8(R6) TOKEN LONG ENOUGH FOR MATCH? 00001800
- BL OPTSLP NO, TRY AGAIN 00001810
- EX R1,OPTCMP COMPLETE MATCH? 00001820
- BE OPTFIND YES 00001830
- OPTSLP BXLE R6,R4,OPTSCAN LOOP OVER OPTIONS 00001840
- B ERR071 ILLEGAL OPTION 00001850
- OPTFIND ICM R15,7,9(R6) POINT TO PARSING ROUTINE 00001860
- BALR R14,R15 EXECUTE OPTION ROUTINE 00001870
- B OPTLOOP PARSE NEXT OPTION 00001880
- OPTCMP CLC 0(,R3),0(R6) OPTION FOUND? 00001890
- SPACE 1 00001900
- *---------------------------------------------- CHECK FOR VALID OPTIONS 00001910
- ENDOPT DS 0H 00001920
- TM FLG,XXLAB PROCESSING TAPE LABEL? 00001930
- BO ENDLAB YES, RESUME TAPE READING 00001940
- TM FLG,XXPM1+XXPM2 DDNAME + FILEID PRESENT? 00001950
- BZ ERR001 NEITHER, SYNTAX ERROR 00001960
- BO OPENTAPE BOTH, PROCEED TO COPY 00001980
- ICM R0,15,LFIL JUST POSITIONING REQUEST? 00002000
- BZ ERR083 NO, TOO BAD 00002010
- SPACE 1 00002030
- *---------------------------------------------------------------------- 00002040
- *----------------------------------------------------PREPARE INPUT FILE 00002050
- OPENTAPE DS 0H 00002210
- L 0,TAPSIZE MAX TAPE RECORD SIZE 00002220
- SRL 0,3 CONVERT TO DOUBLEWORDS 00002230
- DMSFREE DWORDS=(0),ERR=ERR283 GET A BUFFER 00002240
- STCM R1,7,TAPBUFF SET BUFFER ADDRESS FOR TAPE I/O 00002250
- LR R2,R1 COPY ADDRESS TO R2 00002260
- SPACE 1 00002270
- CONT1 DS 0H 00002290
- ST R2,OUTBUFF STORE BUFFER ADDR 00002300
- CONT2 DS 0H FOR REPEAT FILES 00002310
- SR R9,R9 CLEAR BLOCK READ COUNT 00002320
- ICM R7,15,LFIL SPECIFIED FILE? 00002350
- BZ READ NO 00002360
- TM FLG,XXTSL SL? 00002370
- BO READ YES, WILL FIND IT 00002380
- BAL R8,TAPREW NL, POSITION TAPE 00002390
- L R7,LFIL 00002400
- BCT R7,*+8 FILES TO SKIP 00002410
- B CONT3 FILE=1, DONE 00002420
- MVC TAPOPRN,=CL8'FSF' 00002430
- BAL R8,TAPEMOVE FIND IT 00002440
- CONT3 TM FLG,XXPM2 JUST POSITIONING? 00002450
- BZ TAPECLOS YES, DONE 00002460
- SPACE 1 00002470
- *---------------------------- START READING---------------------------- 00002480
- READ DS 0H 00002490
- TAPEREAD DS 0H 00002640
- MVC TAPOPRN,=CL8'READ' SET TO READ 00002650
- BAL R8,TAPEX1 EXECUTE TAPE OP 00002660
- DC AL4(*+4) NO SPECIAL ERROR EXIT 00002670
- L R0,TAPNORD LOAD LENGTH OF BLOCK READ 00002680
- LTR R15,R15 TEST RETURN CODE 00002690
- BZ TAPR2 OK 00002700
- CH R15,=H'2' END OF FILE? 00002710
- BE TAPEOF YES 00002720
- CH R15,=H'8' LENGTH ERROR? 00002730
- BNE FAIL NO - REAL ERROR 00002740
- SPACE 1 00002750
- *-------------------------------------------------------- DETECT LABELS 00002760
- TAPR2 BAL R8,ASCTRN CHANGE FROM ASCII IF NEC. 00002770
- TM FLG,XXLAB SEE IF READING LABELS ALREADY 00002780
- BO TLABDS YES, DECIDE WHICH KIND 00002790
- TM FLG,XX1ST SEE IF ALREADY STARTED PROCESSING 00002800
- BO TAPR9 YES, MUST BE READING DATA FILE 00002810
- OI FLG,XX1ST NOW STARTED 00002820
- TM FLG,XXTSL EXPECTING LABELS? 00002830
- BO TLABDS YES, LOOK 00002840
- ICM R8,15,LFIL NO, SPECIFIED 'NL <N>'? 00002850
- BNZ TAPR9 YES, DON'T RECOGNIZE LABELS 00002860
- TLABDS BAL R8,WHLABT DECIDE IF A LABEL RECORD 00002870
- B TAPR9 NOT A LABEL 00002880
- SPACE 1 00002890
- *-------------------------------------------------------- PROCESS LABEL 00002900
- TL0 DS 0H ORIGIN OF LABEL PROCESSORS 00002910
- SPACE 1 00002920
- TLV1 LA R4,4(R2) POINT TO VOLID -- VOL1 -- 00002930
- BAL R8,CKVOLSER CHECK FOR MATCH 00002940
- LINEDIT TEXT='SPROSC780I TAPE VOLUME: ......',DISP=ERRMSG, +00002950
- DOT=NO,SUB=(CHARA,(R4)) 00002960
- TLV2 B TAPEREAD -- SKIP OVER VOL2 -- 1.3 00002970
- SPACE 1 00002980
- TLH2 CLI TAPDSN,X'FF' HDR1 SEEN YET? -- HDR2 -- 00002990
- BNE TLH2DCB YES, INTERPRET DCB INFO 00003000
- LA R7,1 BACK UP TO START OF LABEL FILE 00003010
- B LABRTRY AND EXPECT HDR1 00003020
- SPACE 1 00003030
- NULFILE TM FLG,XXTSL EXPECTING LABEL? 00003040
- BO TLE2 YES, TRY AGAIN 00003050
- ICM R0,15,LFIL NO, WAS IT 'NL <N>'? 00003060
- BNZ CLOSEOF YES, WE REACHED THE END 00003070
- SPACE 1 00003080
- TLE2 DS 0H BACK UP AND TRY AGAIN -- EOF2 -- 00003090
- LA R7,3 SET COUNT = 3 00003100
- LABRTRY LH R1,FINDCNT CHECK AVAILABLE TRIES 00003110
- BCT R1,*+8 00003120
- B ERR014 TOO MANY ERRORS 00003130
- STH R1,FINDCNT 00003140
- MVC TAPOPRN,=CL8'BSF' BACKSPACE FILES 00003150
- BAL R8,SOFTMOVE ISSUE COMMANDS 00003160
- DC AL4(WOUND) ERROR MUST MEAN LOAD POINT ON TAPE 00003170
- MVI TAPOPRN,C'F' NOW FORWARD SKIP 00003180
- BAL R8,TAPEX1 ... OVER THAT LAST FILE MARK 00003190
- B TAPEREAD TRY AGAIN 00003200
- SPACE 1 00003210
- TLH1 MVC TAPDSN,4(R2) SAVE TAPE FILE DSNAME -- HDR1 -- 00003220
- MVC TAPGEN,35(R2) SAVE GENERATION NO., IF ANY 00003230
- NI FLG2,255-XXAPP 1.2 00003240
- CLI 27(R2),C'0' IS THE VOLUME SEQUENCE VALID? 1.2 00003250
- BNE TLH1OK NO, ASSUME SINGLE-VOLUME 1.2 00003260
- CLC =C'0001',27(R2) IS THIS THE FIRST VOLUME? 1.2 00003270
- BNL TLH1OK YES, FINE 1.2 00003280
- OI FLG2,XXAPP NO, MUST APPEND TO PREVIOUS ATTEMPT 1.2 00003290
- TLH1OK DS 0H 1.2 00003300
- SR R14,R14 CLEAR FILE OFFSET 1.1 00003310
- CLC =C'CMS/SPR',61(R2) HDR1 HAS FM NUMBER? 1.1 00003320
- BNE FILCHK NO 1.1 00003330
- CLI 60(R2),C'0' VALID? 1.1 00003340
- BL FILCHK NO, FORGET IT 1.1 00003350
- MVC OUTFM+1(1),60(R2) YES, USE IT 1.1 00003360
- OI FLG2,XXFMN+XXFMH 1.1 00003370
- B FILCHK 00003380
- SPACE 1 00003390
- TLE1 DS 0H -- EOF1 -- 00003400
- LA R14,2 SET COUNT FOR 2 AHEAD (DATA+TRAILER) 00003410
- *--------------------------------------------------TAPE AT HDR1 OR EOF1 00003420
- FILCHK DS 0H 00003430
- MVC TAPFIL,31(R2) SAVE FILE SERIAL NUMBER 00003440
- LA R3,TAPFIL-8 SET PTR FOR 'SCAN' 00003450
- BAL R8,CONV CONVERT STRING TO BINARY 00003460
- LTR R0,R0 VALID FILE NUMBER? 1.2 00003470
- BP *+8 OK 1.2 00003480
- LA R0,1 NO, CALL IT FILE 1 1.2 00003490
- LR R7,R0 KEEP CURRENT FILE NO. IN R7 00003500
- ICM R0,15,LFIL GET REQUESTED FILE NUMBER 00003510
- BNZ *+6 00003520
- LR R0,R7 NO, USE CURRENT FILE 00003530
- SR R7,R0 GET OFFSET IN DATA FILES 00003540
- MH R7,=H'3' GET TO NUMBER OF TAPE MARKS 00003550
- AR R7,R14 ADD EITHER 2 OR 0 (EOF/HDR) 00003560
- BZ WDSN MATCHES, GO ON 00003570
- SPACE 1 00003580
- *------------------------------------------------------ MUST MOVE TAPE 00003590
- TAPRETRY DS 0H (R7) HAS NO. TAPE FILES TO BACK UP 00003600
- LH R1,FINDCNT CHECK AVAILABLE TRIES 00003610
- BCT R1,*+8 00003620
- B ERR009 MUST BE OSCILLATING 00003630
- STH R1,FINDCNT 00003640
- LTR R7,R7 BACKWARD IF POS. 00003650
- BM SKPFWD AHEAD ON TAPE 00003660
- BCT R0,SKPBCK (R0) HAD REQUESTED FILE NUMBER 00003670
- * - REQUESTED FILE 1, MIGHT AS WELL REWIND 00003680
- SPACE 1 00003690
- *--------------------------------------------------------REWIND TO VOL1 00003700
- BAL R8,TAPREW REWIND TAPE 00003710
- WOUND OI FLG,XXLAB+XX1ST SET TO TRY LABELS AGAIN 00003720
- B TAPEREAD AND START OVER 00003730
- SPACE 1 00003740
- *------------------------------------------------------------ BACKSPACE 00003750
- SKPBCK LA R7,1(R7) MUST BACK UP ONE EXTRA 00003760
- MVC TAPOPRN,=CL8'BSF' BACKSPACE FILES 00003770
- BAL R8,TAPEMOVE SKIP FILES WITH MESSAGE 00003780
- DC AL4(WOUND) MUST HAVE REACHED LOAD POINT 00003790
- BCTR R7,0 NOW MUST SKIP FORWARD ONE 00003800
- SPACE 1 00003810
- *-------------------------------------------------------- FORWARD SPACE 00003820
- SKPFWD LPR R7,R7 GET NUMBER TO SKIP 00003830
- MVC TAPOPRN,=CL8'FSF' SKIP FORWARD 00003840
- BAL R8,TAPEMOVE SKIP FILES 00003850
- B TAPEREAD TRY NEXT LABEL 00003860
- SPACE 1 00003870
- *-------------------------------------------------------------- GET DCB 00003880
- TLH2DCB BCT R3,ENDLAB R3=1 IF HDR2, SKIP DCB IF HDR3 OR HDR4 1.3 00003890
- MVC TLBRCF,=AL1(4,38,36) TR MASK FOR INFO 1.3 00003900
- TR TLBRCF,0(R2) FETCH RECFM BYTES 00003910
- MVC TLBBLK,5(R2) FETCH BLKSIZE 00003920
- MVC TLBLRC,10(R2) FETCH LRECL 00003930
- LA R3,TLBPRM-8 POINT TO PSEUDO OPTION LIST 00003940
- B OPTLOOP SCAN AND INTERPRET DCB INFO 00003950
- * 00003960
- ENDLAB DS 0H RETURN HERE FROM SCANNER 00003970
- BAL R8,TAPFSF SKIP REST OF LABEL BLOCKS (IF ANY) 00003980
- SPACE 1 00003990
- *----------------------------------------------------------END OF LABEL 00004000
- TAPEOF TM FLG,XX1ST ANY RECORDS READ? 00004010
- BZ NULFILE NO, MUST TRY AGAIN 00004020
- TM FLG,XXLAB SEE IF READING LABELS 00004030
- BZ CLOSE NO, DONE READING 00004040
- CLI TAPDSN,X'FF' HDR1 SEEN YET? 1.1 00004050
- BE CLOSEOF NO, REACHED EOT 1.3 00004060
- XI FLG,XXLAB TURN OFF FLAG 00004070
- B READ START READING FILE 00004080
- SPACE 1 00004090
- *------------------------------------------------------ DISPLAY DSNAME 00004100
- WDSN DS 0H 00004110
- CLI DSN,C' ' DSNAME VERIFICATION REQUESTED? 00004120
- BE WDSN1 NO 00004130
- L R1,ADSN START OF LAST 17 BYTES 00004140
- CLC TAPDSN,0(R1) COMPARE VALUES 00004150
- BNE ERR016 WE LOSE 00004160
- WDSN1 DS 0H 00004170
- LA R4,21(R2) POINT TO VOLID ON HDR1 00004180
- LINEDIT TEXT='SPROSC781I TAPE ...... DSN: . . . ..............+00004190
- ... ...... FILE ....',DISP=ERRMSG,DOT=NO,RENT=NO, +00004200
- SUB=(CHARA,(R4),CHARA,TAPDSN,CHARA,TAPGEN,CHARA,TAPFIL) 00004210
- TM FLG2,XXAPP CONTINUATION OF MULTI-REEL FILE? 1.2 00004220
- BO *+8 YES, VOLSER IS THAT OF 1ST VOLUME 1.2 00004230
- BAL R8,CKVOLSER CHECK FOR MATCH 00004240
- TM FLG,XXPM2 COPYING TO DISK FILE? 00004250
- BZ TAPPHDR NO, JUST POSITIONING TO HEADER LABEL 00004260
- B TAPEREAD 00004270
- SPACE 1 00004280
- *--------------------------------------------------------NON-LABEL FILE 00004290
- TAPR9 TM FLG,XXOPN SEE IF DCB INFO IS CHECKED 00004300
- BO TAPOPN ALREADY CHECKED 00004310
- LA R7,1 BACK UP IN CASE OF ERROR 00004320
- L R0,LFIL SPECIFIC TAPE FILE REQUESTED 00004330
- TM FLG,XXLAB SEE IF TRYING TO READ LABELS 00004340
- BO TAPRETRY YES, BAD LABELS 00004350
- TM FLG,XXTSL OK. SL TAPE? 00004360
- BZ FSEQOK NO, THIS MUST BE OK 00004370
- CLI TAPDSN,X'FF' YES, HDR1 SEEN? 00004380
- BNE FSEQOK YES, FINE 00004390
- NI FLG,255-XX1ST NO, TRY ALL OVER 00004400
- B TAPRETRY BACK UP AND LOOK AGAIN 00004410
- FSEQOK DS 0H 00004420
- LA R0,TAPDSN 00004430
- CLI DSN,C' ' USER GAVE DSN? 00004440
- BE *+8 NO 00004450
- LA R0,DSN YES, USE IT 00004460
- BAL R8,GETFID EXTRACT FILE ID IF NEC. 00004470
- LA R14,PRFSTR COMPARE WITH SPECIFIED PREFIX 1.4 00004471
- LA R15,8 NOTE: PREFIX MAY BE ALL-BLANK 1.4 00004472
- LA R0,OUTFN 1.4 00004473
- LR R1,R15 1.4 00004474
- CLCL R0,R14 1.4 00004475
- BE *+12 COMPLETE MATCH, LET'S DO IT 1.4 00004476
- CLI 0(R14),C' ' ALL NON-BLANK PREFIX MATCHES? 1.4 00004477
- BNE SKIPFILE NO, SKIP THIS FILE 1.4 00004478
- BAL R14,DCBEXIT2 TEST VALUES AND SET UP FSCB 00004480
- OI FLG,XXOPN MARK IT CHECKED 00004490
- TAPOPN L R0,TAPNORD GET BLOCK LENGTH AGAIN 00004500
- LA R9,1(,R9) INCREMENT BLOCK COUNT 00004510
- SPACE 1 00004520
- *------------------------------------------------------------TEST RECFM 00004530
- READ2 DS 0H 00004540
- TM DCBRECFM,DCBRECDU RECFM=D? 1.1 00004550
- BO READV YES, SIMILAR TO V 1.1 00004560
- TM DCBRECFM,DCBRECU UNDEFINED LENGTH BLOCK? 00004570
- BO WRITBLK WRITE IT OUT 00004580
- TM DCBRECFM,DCBRECF FIXED LENGTH RECORDS 00004590
- BO READF YES 00004600
- SPACE 1 00004610
- *----------------------------------------------------------RECFM=V READ 00004620
- READV DS 0H 00004630
- LA R1,OUT POINT TO OUTPUT FSCB 00004640
- LA R6,4 LOAD LENGTH OF BDW/RDW 00004650
- LR R3,R2 1ST RECORD IF RECFM=D 00004660
- TM DCBRECFM,DCBRECDU 1.3 00004670
- BO READV2 DB. SKIP BDW CHECK 1.3 00004680
- LA R3,4(,R2) POINT TO FIRST OR ONLY RDW 00004690
- CLM R0,3,0(R2) CHECK WITH LENGTH FROM BDW 00004700
- BNE WRITXLEN INCORRECT, MUST BE RECFM=U 00004710
- READV2 DS 0H 1.3 00004720
- LR R5,R2 COPY BLOCK ADDRESS 00004730
- AR R5,R0 POINT PAST THE BLOCK 00004740
- BCTR R5,0 BACK UP 00004750
- CLI OUTFM+1,C'4' FILEMODE 4 OUTPUT? 00004760
- BE WRITVBS GO WRITE THE BLOCK (OR REBLOCK IT) 1.3 00004770
- TM DCBRECFM,DCBRECSB SPANNED RECORDS? 00004780
- BO WRITVBS GO WRITE THE BLOCK (OR REBLOCK) 1.3 00004790
- TM DCBRECFM,DCBRECDU 1.1 00004800
- BO READVB ASSUME DB 1.1 00004810
- TM DCBRECFM,DCBRECBR BLOCKED RECORDS 00004820
- BO READVB YES 00004830
- SPACE 1 00004840
- *-------------------------------------------------------- WRITE RECFM=V 00004850
- LR R4,R0 COPY BLOCK LENGTH 1.1 00004860
- BAL R8,SDWCHK GET SEGMENT LENGTH 1.1 00004870
- BNZ ERR018 ERROR 1.1 00004880
- B WRITFS WRITE IT OUT 00004890
- SPACE 1 00004900
- *------------------------------------------------------DEBLOCK RECFM=VB 00004910
- READVB DS 0H 00004920
- DMSKEY NUCLEUS INTO NUCLEUS PROTECT KEY FOR SPEED 00004930
- READVB1 DS 0H 00004940
- BAL R8,SDWCHK GET SEGMENT LENGTH 1.1 00004950
- BNZ READVB2 ERROR, GET OUT OF LOOP 00004960
- LTR R4,R4 LENGTH=0? 00004970
- BZ READVB2 END, GET OUT OF LOOP 00004980
- FSWRITE FSCB=(1),FORM=E,TYPCALL=BALR WRITE A RECORD 00004990
- LTR R8,R15 TEST RETURN CODE 00005000
- BNZ READVB2 LEAVE LOOP IF BAD 00005010
- BXLE R3,R4,READVB1 LOOP OVER RECORDS IN BLOCK 00005020
- READVB2 DS 0H 00005030
- LR R8,R15 SAVE RETURN CODE 00005040
- DMSKEY RESET BACK TO USER KEY 00005050
- LTR R15,R8 TEST RC FROM LAST WRITE OR SPAN CHECK 00005060
- BZ READVZ OK - NOW CHECK LENGTH 00005070
- BM ERR018 SPANNED RECORD 00005080
- MVC OUTCOMM,=CL8'WRBUF' RESTORE SVC 202 INDICATOR 00005090
- B FAIL FIND OUT WHAT WENT WRONG 00005100
- SPACE 00005110
- READVZ BCTR R3,0 1.1 00005120
- CR R3,R5 EXACTLY FINISHED BLOCK? 1.1 00005130
- BE READ OK 1.1 00005140
- OI FLG2,XXMLT NO, MAKE A NOTE 1.1 00005150
- B READ 00005160
- SPACE 1 00005170
- *---------------------------------------------------------- RECFM=F,FB? 00005180
- READF DS 0H 00005190
- LH R1,DCBLRECL GET RECORD LENGTH 00005200
- TM FLG2,XXASC 00005210
- BZ READFE DON'T CHECK FOR PADDED BLOCK 1.1 00005220
- LR R5,R0 1.1 00005230
- AR R5,R2 POINT TO END 1.1 00005240
- BCTR R5,0 1.1 00005250
- CLI 0(R5),C'^' CHECK FOR VMS-STYLE PADDING 1.1 00005260
- BE *-6 1.1 00005270
- AR R5,R1 ROUND UP 1.1 00005280
- SR R4,R4 1.1 00005290
- SR R5,R2 GET EFFECTIVE LENGTH 1.1 00005300
- DR R4,R1 1.1 00005310
- MR R4,R1 GET MULTIPLE OF LRECL 1.1 00005320
- LR R0,R5 USE THAT AS LENGTH 1.1 00005330
- READFE CLI OUTFM+1,C'4' FILEMODE 4 OUTPUT FILE? 00005340
- BNE READFB NO - DEBLOCK 00005350
- LH R1,DCBBLKSI LOAD BLOCK SIZE 00005360
- SR R1,R0 SHORT BLOCK? 00005370
- BNH WRITBLK NO 00005380
- AR R0,R2 POINT TO END OF BLOCK 00005390
- LA R14,EOBID POINT TO END-OF-BLOCK INSERT 00005400
- LA R15,4 LOAD LENGTH OF INSERT 00005410
- MVCL R0,R14 INSERT END-OF-BLOCK INDICATOR AND FILL 00005420
- SR R0,R2 RESTORE FULL BLOCK LENGTH 00005430
- B WRITBLK WRITE THE BLOCK 00005440
- SPACE 1 00005450
- *------------------------------------------------------DEBLOCK RECFM=FB 00005460
- READFB DS 0H 00005470
- SR R14,R14 CLEAR UPPER DIVISOR REGISTER 00005480
- LR R15,R0 COPY BLOCKSIZE FOR DIVIDE 00005490
- DR R14,R1 GET BLOCKING FACTOR IN R15 00005500
- ST R15,OUTANIT STORE RECORD COUNT IN FSCB 00005510
- LTR R14,R14 ANY REMAINDER? 00005520
- BZ WRITBLK NO, IT'S A PROPER MULTIPLE 00005530
- MR R14,R1 OH WELL, TRUNCATE THE BLOCK AND COPY 00005540
- LR R0,R15 00005550
- SPACE 1 00005560
- WRITXLEN OI FLG2,XXMLT NOTE BLOCK IS WRONG LENGTH 1.1 00005570
- SPACE 1 00005580
- *---------------------------------------------------- WRITE TO CMS FILE 00005590
- WRITBLK DS 0H 00005600
- ST R0,OUTSIZE STORE BLOCK LENGTH 00005610
- WRITFS FSWRITE FSCB=OUT,FORM=E,ERROR=FAIL WRITE THE BLOCK 00005620
- B READ READ THE NEXT BLOCK 00005630
- SPACE 1 00005640
- *----------------------------------------------- REBLOCK OR WRITE AS IS 00005650
- SPACE 1 00005660
- * ENTER WITH R2->BUFFER, R3->INPUT DATA, R5->LAST OF INPUT, R6=4 1.3 00005670
- WRITVBS ICM R1,15,REBBUF REBLOCKING? 1.3 00005680
- BZ WRITBLK NO, JUST WRITE IT 1.3 00005690
- MVI SPNFLGS,0 CLEAR SPANNING FLAGS 1.3 00005700
- L R1,REBEND END OF OUTPUT BUFFER 1.3 00005710
- L R14,REBPTR START OF AVAILABLE SPACE 1.3 00005720
- SR R1,R14 ROOM REMAINING 1.3 00005730
- WRITVLP BAL R8,SDWCHK GET SEGMENT LENGTH IN R4 1.3 00005740
- BZ WRITVNA NOT SPANNED HERE, USE IT 1.3 00005750
- MVC SPNFLGS,2(R3) SPANNED, KEEP FLAGS 1.3 00005760
- AR R3,R6 NOW SKIP OVER SDW 1.3 00005770
- SR R4,R6 AND REDUCE THE LENGTH 1.3 00005780
- BM ERR018 SOMETHING FUNNY HAPPENED 1.3 00005790
- TM SPNFLGS,2 FIRST SEGMENT? 1.3 00005800
- BO WRITVNB NO, SKIP SETTING UP NEW RDW 1.3 00005810
- WRITVNA C R14,REBREC MAKE SURE WE DON'T HAVE ANY LEFTOVERS 1.3 00005820
- BNE ERR018 WE DID. SOMETHING FAILED 1.3 00005830
- XC 0(4,R14),0(R14) CLEAR NEW RDW 1.3 00005840
- AR R14,R6 AND SPACE OVER IT 1.3 00005850
- SR R1,R6 REDUCE SIZE OF REMAINING SPACE 1.3 00005860
- WRITVNB CR R4,R1 ROOM FOR WHOLE SEGMENT? 1.3 00005870
- BH WRITVW NO, MUST WRITE THE BLOCK NOW 1.3 00005880
- L R15,REBREC START OF CURRENT OUTPUT RECORD 1.3 00005890
- LA R0,0(R4,R14) END OF RECORD INCLUDING NEW SEGMENT 1.3 00005900
- SR R0,R15 CURRENT LENGTH 1.3 00005910
- STCM R0,3,0(R15) MAKE TENTATIVE RDW 1.3 00005920
- LR R15,R4 SET UP LENGTH FOR COPY 1.3 00005930
- LR R0,R3 INPUT PTR 1.3 00005940
- MVCL R14,R0 COPY TO OUTPUT BUFFER 1.3 00005950
- TM SPNFLGS,1 WAS THIS THE LAST SEGMENT OF A RECORD? 1.3 00005960
- BO WRITVLQ NO 1.3 00005970
- ST R14,REBREC YES, SET PTR TO NEXT RECORD 1.3 00005980
- WRITVLQ BXLE R3,R4,WRITVLP UPDATE INPUT PTR AND LOOP 1.3 00005990
- ST R14,REBPTR USED INPUT BLOCK, SAVE OUTPUT PTR 1.3 00006000
- B READ GET MORE INPUT 1.3 00006010
- SPACE 1 1.3 00006020
- *-------------------------------------------- WRITE A FULL OUTPUT BLOCK 00006030
- WRITVW ST R14,REBPTR MUST DUMP BLOCK, SAVE OUTPUT PTR 1.3 00006040
- BAL R14,WRITVDMP DUMP IT 1.3 00006050
- B ERR003 OOPS 1.3 00006060
- B WRITVNB RESUME COPYING. R1, R14 UPDATED 1.3 00006070
- SPACE 1 00006080
- *----------------------------------------- WRITE OUTPUT BLOCK AND RESET 00006090
- WRITVDMP ST R14,WRDRET SAVE RETURN ADR 1.3 00006100
- LM R14,R15,REBBUF START OF BUFFER AND AMOUNT FILLED 1.3 00006110
- SR R15,R14 TOTAL LENGTH 1.3 00006120
- STCM R15,3,0(R14) FILL IN BDW 1.3 00006130
- STM R14,R15,OUTBUFF SET UP OUTPUT FSCB 1.3 00006140
- CR R15,R6 IS TOTAL LENGTH = 4? 1.3 00006150
- L R15,WRDRET RETURN ADR, IF NECESSARY 1.3 00006160
- BER R15 LENGTH=4, NOTHING TO OUTPUT 1.3 00006170
- FSWRITE FSCB=OUT,FORM=E,ERROR=FAIL 1.3 00006180
- * 1.3 00006190
- LM R0,R1,REBREC PTRS TO START AND END OF PARTIAL RECORD1.3 00006200
- SR R1,R0 GET LENGTH 1.3 00006210
- L R14,REBBUF START OF BUFFER 1.3 00006220
- AR R14,R6 ALLOW FOR BDW 1.3 00006230
- ST R14,REBREC UPDATED START OF CURRENT RECORD 1.3 00006240
- LR R15,R1 LENGTH TO COPY 1.3 00006250
- MVCL R14,R0 NOW R14 IS OUTPUT PTR AGAIN 1.3 00006260
- L R1,REBEND END OF BUFFER 1.3 00006270
- SR R1,R14 ROOM NOW REMAINING 1.3 00006280
- L R15,WRDRET RETRIEVE RETURN ADR (N.B. IN R15) 1.3 00006290
- B 4(,R15) RETURN AND SKIP 1.3 00006300
- SPACE 1 00006310
- *------------------------------------------------------ CMS WRITE FAILS 00006320
- FAIL DS 0H 00006330
- ST R15,RETC STORE ERROR CODE 00006360
- LR R8,R1 00006362
- LINEDIT TEXT='........ ERROR ......',DOT=NO, +00006364
- SUB=(CHARA,(R8),DEC,(R15)),RENT=NO 00006366
- B CLOSE2 CONTINUE 00006370
- SPACE 1 00006371
- *---------------------------------------------------------- SKIP A FILE 00006372
- SKIPFILE LINEDIT TEXT=' - SKIP',DOT=NO 1.4 00006373
- BAL R8,TAPFSF SKIP OVER DATA FILE 1.4 00006376
- B RPTCHK AND START OVER 1.4 00006377
- SPACE 1 00006380
- *---------------------------------------------------- DISPLAY GOOD COPY 00006390
- CLOSE DS 0H 00006400
- ICM R1,15,REBBUF ARE WE REBLOCKING? 1.3 00006410
- BZ *+12 NO 1.3 00006420
- BAL R14,WRITVDMP PROBABLY. DUMP LAST BLOCK, IF ANY 1.3 00006430
- NOP 0 IGNORE ERROR IF NO PARTIAL BLOCK 1.3 00006440
- SPACE 1 00006450
- LINEDIT TEXT='SPROSC770I ''........'' (........ BLOCKS) COPIED+00006460
- TO ''....................''',DISP=ERRMSG,RENT=NO, +00006470
- SUB=(CHARA,DDNAME,DEC,(R9),CHAR8A,OUTFN),DOT=NO 00006480
- FSCLOSE FSCB=OUT NOW CLOSE THE OUTPUT FILE 1.3 00006490
- RPTCHK DS 0H 1.4 00006495
- L R0,RPTCNT MORE FILES TO READ? 1.1 00006500
- BCTR R0,0 1.1 00006510
- LTR R0,R0 1.1 00006520
- BNP CLOSE2 NO, DONE READING 1.1 00006530
- MVI OUTFN,C'=' YES, SEEK NEW FILE ID 1.1 00006540
- MVI DSN,C' ' CLEAR VALIDATION NAME 1.1 00006550
- BAL R14,RPTSET SAVE NEW COUNT 1.1 00006560
- XC ZST2(ZST2L),ZST2 1.1 00006570
- NI FLG,255-XXOPN 1.1 00006580
- OI FLG,XXLAB+XX1ST 1.1 00006590
- NI FLG2,255-XXMLT-XXFMN-XXFMH 1.1 00006600
- BAL R8,SETUP1 RE-INIT. FOR READ 1.1 00006610
- BAL R8,TAPFSF SKIP OVER EOF LABEL 1.1 00006620
- B CONT2 1.1 00006630
- SPACE 1 00006640
- CLOSEOF DS 0H 00006650
- LINEDIT TEXT='SPROSC772I REACHED EOT ON ....',DOT=NO, +00006660
- DISP=ERRMSG,SUB=(CHARA,TAPDEV) 00006670
- MVC TAPOPRN,=CL8'BSF' 00006680
- LA R7,2 00006690
- BAL R8,SOFTMOVE SKIP OVER EOT INDICATOR 00006700
- DC AL4(*+4) 00006710
- SPACE 1 00006720
- CLOSE2 DS 0H 00006730
- B TAPECLOS 00006740
- SPACE 1 00006760
- *---------------------------------------------- LEAVE TAPE AT THIS FILE 00007080
- TAPPHDR MVC TAPOPRN,=CL8'BSR' SKIP BACK OVER HDR1 00007090
- BAL R8,TAPEX1 ISSUE COMMAND ONCE 00007100
- SPACE 1 00007110
- *------------------------------------------------------------TAPN CLOSE 00007120
- TAPECLOS DS 0H 00007130
- L R0,TAPSIZE MAX TAPE RECORD SIZE 00007140
- LTR R1,R2 BUFFER THERE? 00007150
- BZ CMSCLOSE NO, WE MUST BE DONE 00007160
- SRL R0,3 CVRT TO DBLWRDS 00007170
- DMSFRET DWORDS=(0),LOC=(1) RELEASE THE BUFFER 00007180
- SR R2,R2 00007190
- TM FLG,XXPM2 COPY DONE? 00007310
- BZ EXITR NO FILEID GIVEN, JUST EXIT 00007320
- TM FLG,XXTSL STANDARD LABEL? 00007330
- BNO CMSCLOSE NO, WE ARE OK 00007340
- BAL R8,TAPFSF SKIP TRAILER LABELS 00007350
- SPACE 1 00007360
- *--------------------------------------------------------CLOSE CMS FILE 00007370
- CMSCLOSE DS 0H 00007380
- FSCLOSE FSCB=OUT CLOSE THE OUTPUT FILE 00007390
- EXITR TM FLG2,XXMLT ANY BLOCK SIZE ERRORS? 1.1 00007400
- BZ EXITR2 NO, FINE 1.1 00007410
- LINEDIT TEXT='SPROSC783I ONE OR MORE TAPE BLOCKS WERE OF IMPRO+00007420
- PER LENGTH',DOT=NO,DISP=ERRMSG 1.1 00007430
- EXITR2 L R15,RETC LOAD THE RETURN CODE 00007440
- SPACE 1 00007450
- * ---------------------------------------------------------EXIT LINKAGE 00007460
- EXIT DS 0H 00007470
- LR R2,R15 SAVE RETURN CODE 00007480
- LTR R1,R11 GET PTR TO AUX STORAGE 00007490
- BZ STORRETZ NONE 00007500
- LA R0,LSTOR 00007510
- DMSFRET LOC=(1),DWORDS=(0) 00007520
- STORRETZ DS 0H 00007530
- ICM R1,15,REBBUF ANY REBLOCK BUFFER? 1.3 00007540
- BZ REBRETZ NO, OK 1.3 00007550
- L R0,REBDWDS YES, GET LENGTH 1.3 00007560
- DMSFRET DWORDS=(0),LOC=(1) RELEASE IT 1.3 00007570
- REBRETZ DS 0H 1.3 00007580
- LR R15,R2 00007590
- L R14,SAVER14 RESTORE RETURN ADDRESS 00007600
- BR R14 RETURN TO CMS 00007610
- SPACE 1 00007620
- *-----------------------------------------------------SOME INITIALIZING 00007630
- SETUP1 MVI TAPDSN,C' ' INSERT BLANK DSN,SER=' ' 00007640
- MVC TAPDSN+1(LINIT),TAPDSN AND EXTEND 00007650
- MVI TAPDSN,X'FF' INIDICATE HDR1 LABEL NOT SEEN YET 00007660
- MVI OUTFV,C'V' DEFAULT RECFM 00007670
- MVI OUTFM+1,C'1' DEFAULT FM NUMBER 00007680
- CLI CMDFMN,0 ANY FM NUMBER GIVEN IN COMMAND? 1.3 00007690
- BE SETUP2 NO, USE DEFAULT 1.3 00007700
- MVC OUTFM+1(1),CMDFMN YES, USE IT 1.3 00007710
- OI FLG2,XXFMN REMEMBER WE GOT IT 1.3 00007720
- SETUP2 DS 0H 1.3 00007730
- LA R0,1 00007740
- ST R0,OUTANIT 1 ITEM/WRITE 00007750
- SR R0,R0 00007760
- MVI DCBRECFM,0 CLEAR RECFM 00007770
- STH R0,DCBBLKSI CLEAR BLKSIZE 00007780
- STH R0,DCBLRECL CLEAR LRECL 00007790
- BR R8 00007800
- SPACE 1 00007810
- *---------------------------------------------------------------------- 00007820
- * EXECUTE 'TAPLIST' (R7) TIMES, LEAVE (R7)=0 00007830
- * ECHO COMMAND LIST TO TERMINAL, RETURN TO (R8) 00007840
- *---------------------------------------------------------------------- 00007850
- SPACE 1 00007860
- TAPREW MVC TAPOPRN,=CL8'REW' ENTER HERE TO REWIND 00007870
- LA R7,1 OPERATION COUNT 00007880
- SPACE 1 00007890
- TAPEMOVE DS 0H 00007900
- MVI TAPDSN,X'FF' THROW AWAY OLD HDR1, IF ANY 00007910
- LINEDIT TEXT='SPROSC782I EXECUTING .... ........ ON .... ...',+00007920
- RENT=NO,DISP=ERRMSG,DOT=NO, +00007930
- SUB=(CHARA,TAPOPRN,DEC,(R7),CHARA,TAPDEV) 00007940
- B SOFTMOVE 00007950
- * 00007960
- * ENTER HERE TO AVOID MESSAGE AND UNDOING 'HDR1' 00007970
- TAPFSF MVC TAPOPRN,=CL8'FSF' FORWARD ONE FILE 00007980
- TAPEX1 LA R7,1 REPEAT COUNT=1 00007990
- SOFTMOVE DS 0H 00008000
- LA R1,FAIL DEFAULT ERROR EXIT 00008010
- CLI 0(R8),0 ANY IN-LINE EXIT ADR? 00008020
- BNE *+12 NO, USE DEFAULT 00008030
- ICM R1,15,0(R8) GET IN-LINE EXIT ADR 00008040
- LA R8,4(,R8) SKIP ON RETURN 00008050
- STCM R1,15,TAPEXIT STORE EXIT ADR 00008060
- LA R1,TAPLIST 00008070
- SVC 202 00008080
- TAPEXIT DC AL4(FAIL) 00008090
- BCT R7,*-6 00008100
- BR R8 RETURN 00008110
- SPACE 1 00008120
- *--------------------------------------------------DETERMINE LABEL TYPE 00008130
- * RETURN IF NOT A LABEL, ELSE DISPATCH TO HANDLER 00008140
- * SET R3 = RELATIVE NUMBER OF LABEL TYPE WITHIN GROUP 1.3 00008150
- * CLOBBER R4,R5,R6,R15 00008160
- WHLABT LA R15,1 SET SWITCH FOR ASCII TEST 00008170
- CH R0,=H'80' CORRECT LENGTH FOR LABEL? 00008180
- BNER R8 NO, SKIP IT 00008190
- MVC LABTYP,0(R2) YES, COULD BE 00008200
- TM FLG2,XXASC IS IT DEFINITELY ASCII? 00008210
- BZ WHLABL NO, TRY EBCDIC FIRST 00008220
- TM FLG2,XXEBC REALLY? 00008230
- BO WHLABL NO, TRY EBCDIC FIRST ANYWAY 00008240
- LCR R15,R15 YES, ALREADY TRANSLATED 00008250
- WHLABL ICM R3,15,LABTYP LOAD TYPE FOR COMPARISON 00008260
- LA R4,LLBT SET UP BXH 00008270
- LA R5,LBTABZ 00008280
- LA R6,LBTAB-LLBT 00008290
- BXH R6,R4,WHLABA NOT FOUND, TRY ASCII 00008300
- CLM R3,14,0(R6) CHECK TABLE 00008310
- BNE *-8 NOT THIS, TRY NEXT 00008320
- SR R5,R5 00008330
- CLM R3,1,4(R6) CHECK 4TH CHAR AGAINST LIMIT 1.3 00008340
- BHR R8 TOO BIG, BAD 1.3 00008350
- ICM R4,15,0(R6) GET SMALLEST NUMBER OF THIS TYPE 1.3 00008360
- SR R3,R4 WITHIN RANGE? 1.3 00008370
- BMR R8 TOO SMALL, GIVE UP 1.3 00008380
- IC R5,5(R3,R6) GET OFFSET FOR DISPATCH 1.3 00008390
- LA R8,TL0(R5) SET UP DISPATCH ADR 00008400
- OI FLG,XXLAB+XXTSL INDICATE READING LABELS 00008410
- LTR R15,R15 SURPRISE ASCII? 00008420
- BNZR R8 NO, JUST DO IT 00008430
- OI FLG2,XXASC YES, REQUIRE IT NOW 00008440
- TR 0(80,R2),ATOE TRANSLATE WHOLE LABEL 00008450
- BR R8 OK 00008460
- WHLABA BCTR R15,R8 RETURN IF ALREADY TRIED ASCII 00008470
- TR LABTYP,ATOE CONVERT LABEL TYPE TO EBCDIC 00008480
- B WHLABL TRY AGAIN 00008490
- SPACE 00008500
- *-------------------------------------------- GET RECORD/SEGMENT LENGTH 00008510
- * ON ENTRY: R3->RECORD, R6=4, R8=RETURN ADR, R5->LAST BYTE OF BLOCK 00008520
- * USES R4. SETS R15 ON RETURN: 0->OK, -1=>BAD VB, -2=>BAD DB 00008530
- SDWCHK SR R15,R15 00008540
- BCTR R15,0 R15 = -1 00008550
- TM DCBRECFM,DCBRECDU 1.1 00008560
- BO SDWD RECFM=D 1.1 00008570
- SR R4,R4 00008580
- ICM R4,3,0(R3) RECORD LENGTH 00008590
- CLI 2(R3),0 LOOK AT SPAN FLAGS 00008600
- BNER R8 ERROR IF ANY ARE SET 00008610
- B SDWZ 00008620
- SDWD LR R4,R6 SDW LENGTH 1.1 00008630
- BCTR R15,0 R15 = -2 1.1 00008640
- CLC =C'^^^^',0(R3) SEE IF JUST PADDING 1.1 00008650
- BNE SDWDA OK, CHECK ALIGNMENT 1.1 00008660
- LA R5,3(,R3) CHANGE END OF BLOCK 1.1 00008670
- B SDWZ AND RETURN 1.1 00008680
- SDWDK LA R3,1(R3) 1.1 00008690
- SDWDA CR R3,R5 1.1 00008700
- BH SDWZZ RAN OFF THE END 1.1 00008710
- CLI 0(R3),C'^' ANY MORE FOR ALIGNMENT? 1.1 00008720
- BE SDWDK YES, KEEP LOOKING 1.1 00008730
- MVC LABTYP,0(R3) GET CHAR SDW 1.1 00008740
- SDWDL CLI 0(R3),C'0' CHECK FOR DIGITS 1.1 00008750
- BLR R8 ERROR 1.1 00008760
- CLI 0(R3),C'9' 1.1 00008770
- BHR R8 1.1 00008780
- LA R3,1(,R3) 1.1 00008790
- BCT R4,SDWDL LOOP OVER SDW 1.1 00008800
- SR R3,R6 BACK UP OVER SDW ... 1.1 00008810
- PACK DEC,LABTYP 1.1 00008820
- CVB R4,DEC GET LENGTH 1.1 00008830
- * CONVERT VAX/VMS CARRIAGE CONTROL TO ANSI 1.1 00008840
- TM FLG2,XXASC 1.1 00008850
- BZ SDWZ 1.1 00008860
- CH R4,=H'6' SEGMENT LENGTH INCLUDES ENOUGH? 1.1 00008870
- BL SDWZ 1.1 00008880
- BE *+12 1.1 00008890
- CLI 6(R3),C' ' BINARY DATA? 1.1 00008900
- BL SDWZ PROBABLY 1.1 00008910
- CLI 5(R3),X'0D' FUNNY CAR.CTL? 1.1 00008920
- BH SDWZ NOT THAT I KNOW OF 1.1 00008930
- LA R3,1(R3) YES, REMOVE ONE 1.1 00008940
- BCTR R4,0 1.1 00008950
- MVI 4(R3),C' ' USUAL 1-SPACE 1.1 00008960
- CLI 3(R3),X'0D' SPECIAL CHARS 1.1 00008970
- BNL SDWZ NO, LEAVE IT AT THAT 1.1 00008980
- MVC 4(1,R3),3(R3) 1.1 00008990
- TR 4(1,R3),=C'+ 0- 1' GET ANSI CAR.CTL 1.1 00009000
- * GET DATA PTRS 00009010
- SDWZ AR R3,R6 POINT TO DATA 00009020
- SDWZZ SR R4,R6 GET DATA LENGTH 00009030
- BMR R8 ILLEGAL LENGTH 00009040
- STM R3,R4,OUTBUFF STORE IN FSCB 00009050
- SR R15,R15 SIGNAL OK 00009060
- BR R8 00009070
- SPACE 1 00009080
- *------------------------------------------------- TRANSLATE FROM ASCII 00009090
- ASCTRN TM FLG2,XXASC DO IT? 00009100
- BZR R8 NO 00009110
- TM FLG2,XXEBC REFUSE? 00009120
- BOR R8 YES, MAYBE BINARY 00009130
- LR R15,R0 COPY LENGTH OF BLOCK 00009140
- AR R0,R2 POINT TO END OF BLOCK 00009150
- ASCTLP LR R14,R0 00009160
- SR R14,R15 POINT TO UNTRANSLATED STUFF 00009170
- BCTR R15,0 CHANGE COUNT FOR TR 00009180
- EX R15,TRNASC DO UP TO 256 BYTES 00009190
- N R15,=F'-256' DEDUCT COUNT JUST DONE 00009200
- BNZ ASCTLP LOOP IF MORE TO DO 00009210
- SR R0,R2 GET BLOCK LENGTH AGAIN 00009220
- BR R8 DONE, RETURN 00009230
- TRNASC TR 0(,R14),ATOE TRANSLATE A BUNCH 00009240
- SPACE 1 00009250
- *------------------------------------------------ PROCESS EBCDIC OPTION 00009260
- EBCDIC TM FLG2,XXASC ALREADY SPECIFIED? 00009270
- BO ERR340 00009280
- OI FLG2,XXEBC SIGNAL IT 00009290
- BR R14 GO ON 00009300
- SPACE 1 00009310
- *------------------------------------------------- PROCESS ASCII OPTION 00009320
- ASCII TM FLG2,XXEBC ALREADY SPECIFIED? 00009330
- BO ERR340 00009340
- OI FLG2,XXASC SIGNAL IT 00009350
- BR R14 GO ON 00009360
- SPACE 1 00009370
- *--------------------------------------------------PROCESS BLOCK OPTION 00009380
- BLKSIZE DS 0H 00009390
- BAL R8,CONV CONVERT THE VALUE 00009400
- LTR00 LTR R0,R0 VALUE SPECIFIED? 1.2 00009410
- BNPR R14 NO, SKIP IT 1.2 00009420
- STH R0,DCBBLKSI SAVE VALUE 00009430
- BR R14 PARSE NEXT TOKEN 00009440
- SPACE 1 00009450
- *------------------------------------------------PROCESS REBLOCK OPTION 00009460
- REBLOCK BAL R8,CONV CONVERT THE VALUE 1.3 00009470
- LR R6,R0 SAVE VALUE 1.3 00009480
- AH R0,=Y(7+4) ROUND UP AND ALSO NEED 4 EXTRA 1.3 00009490
- SRL R0,3 CONVERT TO DBLWRD COUNT 1.3 00009500
- ST R0,REBDWDS SAVE SIZE 1.3 00009510
- DMSFREE DWORDS=(0),ERR=ERR283 1.3 00009520
- ST R1,REBBUF SAVE PTR TO BUFFER 1.3 00009530
- AR R6,R1 END OF BUFFER 1.3 00009540
- XC 0(4,R1),0(R1) CLEAR OUT BDW 1.3 00009550
- LA R4,4(,R1) PTR TO SPACE FOR A RECORD 1.3 00009560
- LR R5,R4 ALSO CURRENT PTR 1.3 00009570
- STM R4,R6,REBREC SAVE PTRS 1.3 00009580
- BR R14 PARSE NEXT TOKEN 1.3 00009590
- SPACE 1 00009600
- *--------------------------------------------------PROCESS LRECL OPTION 00009610
- LRECL DS 0H 00009620
- BAL R8,CONV CONVERT THE VALUE 00009630
- LTR R0,R0 VALUE SPECIFIED? 1.2 00009640
- BNPR R14 NO, SKIP IT 1.2 00009650
- STH R0,DCBLRECL SAVE VALUE 00009660
- BR R14 PARSE NEXT TOKEN 00009670
- SPACE 1 00009680
- *-----------------------------------------------PROCESS EOT/EOF OPTIONS 00009690
- RPTALL LA R0,4095 'LARGE' NUMBER OF FILES 1.1 00009700
- B RPTSET 1.1 00009710
- RPTNUM BAL R8,CONV CONVERT THE VALUE 1.1 00009720
- RPTSET ST R0,RPTCNT SAVE VALUE 1.1 00009730
- OI FLG,XXTSL IMPLIES LABELS 1.1 00009740
- CLI OUTFN,C'=' MAKE SURE EXPECTED 1.1 00009750
- BNE ERR340 NO 1.1 00009760
- BR R14 PARSE NEXT TOKEN 1.1 00009790
- SPACE 1 00009800
- *---------------------------------------------PROCESS NL/SL/FILE OPTION 00009810
- NLTP TM FLG,XXTSL CAN'T HAVE IT BOTH WAYS 00009820
- BO ERR340 00009830
- B TFIL0 00009840
- SLTP OI FLG,XXTSL 00009850
- TFIL0 DS 0H 00009860
- CLI 8(R3),C'0' FOLLOWED BY FILE NUMBER? 00009880
- BLR R14 NO 00009890
- CLI 8(R3),C'9' 00009900
- BHR R14 NO 00009910
- TFILE BAL R8,CONV CONVERT TO BINARY 00009920
- ST R0,LFIL SAVE FILE NUMBER 00009930
- CVD R0,DEC 00009940
- OI DEC+7,15 SET ZONE 00009950
- UNPK TAPFIL,DEC KEEP FORMATTED COPY 00009960
- BR 14 00009970
- SPACE 1 1.4 00009971
- *------------------------------------------------ PROCESS PREFIX OPTION 00009972
- PREFIX DS 0H 1.4 00009973
- BAL R1,TSTDLM CHECK VALUE PRESENT 1.4 00009974
- MVC PRFSTR,8(R3) SAVE THE VALUE 1.4 00009975
- LA R3,8(,R3) ADVANCE SCAN POINTER 1.4 00009976
- BR R14 CONTINUE OPTION SCAN 1.4 00009977
- SPACE 1 00009980
- *--------------------------------------------------PROCESS RECFM OPTION 00009990
- RECFM DS 0H 00010000
- BAL R1,TSTDLM CHECK VALUE PRESENT 00010010
- LA R1,8 TOKEN SIZE 00010020
- LA R4,LRECFM SET UP FOR BXLE 00010030
- LA R5,RECFMB DITTO 00010040
- MVI DCBRECFM,0 CLEAR INPUT RECFM 00010050
- RECFM1 DS 0H 00010060
- LA R7,RECFMA POINT TO LOOKUP TABLE 00010070
- IC R15,7(R1,R3) GET CHARACTER OF RECFM 00010080
- RECFM2 DS 0H 00010090
- CLM R15,1,0(R7) IS BYTE IN TABLE? 00010100
- BE RECFM3 FOUND 00010110
- BXLE R7,R4,RECFM2 LOOP 00010120
- B ERR308 ILLEGAL RECFM 00010130
- RECFM3 DS 0H 00010140
- IC R15,DCBRECFM GET CURRENT FORMAT 00010150
- EX R15,RECFM5 LEGAL COMBINATION? 00010160
- BNZ ERR308 NO 00010170
- OC DCBRECFM,2(R7) SET DCB FLAGS 00010180
- BCT R1,RECFM1 LOOP OVER VALUE TOKEN 00010190
- TM DCBRECFM,DCBRECU F/V/U IN VALUE? 00010200
- BZ ERR308 NO, BAD 00010210
- LA R3,8(,R3) ADVANCE OPTION POINTER 00010220
- BR R14 RETURN 00010230
- RECFM5 TM 1(R7),0 MASK FROM R15 00010240
- SPACE 1 00010250
- *------------------------------------------------ PROCESS VOLUME OPTION 00010260
- VOLSER DS 0H 00010270
- BAL R1,TSTDLM CHECK VALUE PRESENT 00010280
- MVC VOLUME,8(R3) SAVE THE VALUE 00010290
- LA R3,8(,R3) ADVANCE SCAN POINTER 00010300
- OI FLG,XXTSL 00010310
- BR R14 CONTINUE OPTION SCAN 00010320
- SPACE 1 00010330
- *------------------------------------------------ PROCESS DSNAME OPTION 00010340
- DSNAME DS 0H 00010350
- BAL R1,TSTDLM CHECK VALUE PRESENT 00010360
- LA R6,DSN POINT TO OUTPUT 00010370
- LA R5,L'DSN+1 LOAD MAX LENGTH + 1 00010380
- MVI TRT+C'.',0 DON'T EXPECT ANY DOTS 00010390
- DSNAME1 DS 0H 00010400
- LA R4,8(,R3) POINT TO NEXT INDEX 00010410
- LA R1,8(,R4) POINT PAST TOKEN 00010420
- TRT 0(8,R4),TRT FIND BLANK (IF ANY) 00010430
- SR R1,R4 GET LENGTH TO MOVE 00010440
- LR R7,R1 COPY LENGTH 00010450
- MVCL R6,R4 COPY INDEX TO DSN FIELD 00010460
- LTR R5,R5 TEST REMAINING DSN LENGTH 00010470
- BNH ERR017 BAD IF NONE LEFT 00010480
- LA R3,8(,R3) POINT TO NEXT INDEX 00010490
- CLI 8(R3),X'FF' IS THERE ONE? 00010500
- BE DSNAME2 NO 00010510
- MVI 0(R6),C'.' INSERT DELIMITER 00010520
- LA R6,1(,R6) INCREMENT POINTER TO DSN 00010530
- BCT R5,DSNAME1 DECREMENT REMAINING LENGTH 00010540
- B ERR017 NONE LEFT 00010550
- DSNAME2 DS 0H 00010560
- LA R0,DSN POINT TO DSNAME FIELD 00010570
- SH R6,=H'17' BACK UP 17 FROM END OF NAME 00010580
- CR R6,R0 NAME LT 17 CHARACTERS? 00010590
- BNL *+6 AT LEAST 17, USE LAST 17 00010600
- LR R6,R0 SHORTER THAN 17, USE FIRST 17 00010610
- ST R6,ADSN SAVE PTR TO NAME FOR COMPARISON 00010620
- B ENDOPT THROUGH WITH OPTIONS 00010630
- SPACE 1 00010640
- *-------------------------------------------------- CONVERT CHAR->FIXED 00010650
- CONV DS 0H 00010660
- BAL R1,TSTDLM CHECK VALUE PRESENT 00010670
- LA R1,8(,R3) POINT TO VALUE 00010680
- LA R15,8 LOAD TOKEN LENGTH 00010690
- SR R0,R0 CLEAR RESULT REG 00010700
- CONV1 DS 0H 00010710
- CLI 0(R1),C' ' END OF VALUE? 00010720
- BE CONV2 YES 00010730
- CLI 0(R1),C'0' LEGAL? 00010740
- BL ERR308 NO 00010750
- CLI 0(R1),C'9' LEGAL? 00010760
- BH ERR308 NO 00010770
- MH R0,=H'10' INCREMENT TOTAL 00010780
- IC R4,0(,R1) LOAD THE BYTE 00010790
- N R4,=F'15' GET BINARY VALUE 00010800
- AR R0,R4 ADD TO TOTAL 00010810
- LA R1,1(,R1) POINT TO NEXT BYTE 00010820
- BCT R15,CONV1 LOOP OVER TOKEN 00010830
- CONV2 DS 0H 00010840
- LTR R0,R0 00010850
- BP CONV9 POSITIVE VALUE IS OK 00010860
- TM FLG,XXLAB READING TAPE LABEL? 1.2 00010870
- BZ ERR308 NO, REPORT ERROR 1.2 00010880
- CLC LTR00,0(R8) DOES THE CALLER CHECK THE VALUE? 1.2 00010890
- BNE ERR308 NO, REPORT ERROR 1.2 00010900
- CONV9 LA R3,8(,R3) POINT TO NEXT TOKEN 00010910
- BR R8 RETURN 00010920
- SPACE 1 00010930
- *------------------------------------------------CHECK FOR OPTION VALUE 00010940
- TSTDLM DS 0H 00010950
- CLI 8(R3),X'FF' FENCE? 00010960
- BE ERR095 BAD 00010970
- CLI 8(R3),C')' END OF OPTIONS? 00010980
- BE ERR095 BAD 00010990
- BR R1 OK 00011000
- SPACE 1 00011010
- *----------------------------------------------EXTRACT FILE ID FROM DSN 00011020
- * ENTER WITH R0->NAME, R2->BUFFER, R8=RETURN ADR 00011030
- * NAME RUNS TO FIRST BLANK (44 CHARS MAX) 00011040
- * MUST BE CAREFUL TO PRESERVE R2 00011050
- GETFID ST R2,OUTBUFF IN CASE NOT SAVED YET 00011060
- CLI OUTFN,C'=' NEED FILE ID? 00011070
- BNE GTFDUN NO, JUST ERASE ANY OLD FILE 00011080
- LTR R3,R0 PTR TO DSN 00011090
- BZ ERR019 00011100
- MVI TRT+C'.',0 JUST LOOK FOR BLANKS 00011110
- LA R1,L'DSN(,R3) IN CASE NAME IS FULL-LENGTH 00011120
- TRT 0(L'DSN,R3),TRT FIND 1ST BLANK, IF ANY 00011130
- SR R1,R3 NAME LENGTH 00011140
- BNP ERR019R NOTHING 00011150
- MVI TRT+C'.',1 NOW LOOK FOR DOTS 00011160
- LR R5,R1 COPY LENGTH 00011170
- BCTR R5,0 00011180
- TOKSET XC PTBFR(12),PTBFR CLEAR TOKEN PTRS 00011190
- TOKLP MVC PTBFR,PTBFR+4 SHIFT PREVIOUS PTRS 00011200
- LA R1,1(R5,R3) END OF NAME 00011210
- EX R5,FCHAR LOOK FOR DOT 00011220
- SR R1,R3 TOKEN LENGTH 00011230
- BNP TOKLQ NULL, SKIP THIS ONE 00011240
- STC R1,PTBFL LENGTH OF LAST TOKEN 00011250
- STCM R3,7,PTBFL+1 AND ADR 00011260
- TOKLQ LA R1,1(,R1) ALLOW FOR DOT 00011270
- AR R3,R1 ADVANCE PTR 00011280
- SR R5,R1 DECREMENT LENGTH 00011290
- BNM TOKLP 00011300
- CLI PTBFR+4,0 AT LEAST 2 TOKENS? 00011310
- BNE TOKFM YES, OK 1.3 00011320
- CLI PTBFL,0 AT LEAST 1? 1.3 00011330
- BE ERR019R NO, TOO BAD 00011340
- MVC PTBFR(4),PTBFL SHIFT BACK THE PTR: FOR FILENAME 1.3 00011350
- MVC OUTFT,=C'TAPEFILE' USE DEFAULT FILETYPE 1.3 00011360
- B TOKNT2 1.3 00011370
- TOKFM TM FLG2,XXFMH FM NUM IN SEPARATE FIELD? 1.1 00011380
- BO TOKNT YES, FM NOT IN DSN 1.1 00011390
- CLI PTBFL,2 LAST TOKEN LENGTH=2? 1.1 00011400
- BNE TOKNT NO, ISN'T FM 1.1 00011410
- ICM R4,7,PTBFL+1 MAYBE FM, GET ADR 1.1 00011420
- CLI 0(R4),C'A' ALPHABETIC? 1.1 00011430
- BL TOKNT CAN'T BE FM 1.1 00011440
- CLI 0(R4),C'Z' ALPHABETIC? 1.1 00011450
- BH TOKNT CAN'T BE FM 1.1 00011460
- CLI 1(R4),C'0' VALID NUMBER? 1.1 00011470
- BL TOKNT 1.1 00011480
- CLI 1(R4),C'6' 1.1 00011490
- BH TOKNT NO GOOD 1.1 00011500
- CLI PTBFR,0 AT LEAST 3 TOKENS? 1.1 00011510
- BNE GTFFM YES, GOT FM 1.1 00011520
- TOKNT MVC PTBFR,PTBFR+4 USE JUST LAST TWO TOKENS 1.1 00011530
- TOKNT2 MVI PTBFL,0 NO FILEMODE SPECIFIED HERE 1.2 00011540
- GTFFM CLI PTBFL,2 GOT FM? 00011550
- BNE GTFFN NO, JUST COPY FN/FT 00011560
- TM FLG2,XXFMN FM NUMBER ALREADY SET? 1.1 00011570
- BO GTFFN YES, USE THAT 1.1 00011580
- MVC OUTFM+1(1),1(R4) 00011590
- OI FLG2,XXFMN NOW IT'S SET 1.3 00011600
- GTFFN LA R0,OUTFN OUTPUT PTR 00011610
- L R5,=X'40000000' 00011620
- ICM R4,7,PTBFR+1 GET TOKEN ADR 00011630
- IC R5,PTBFR AND LENGTH 00011640
- LA R1,8 00011650
- MVCL R0,R4 COPY WITH PADDING 00011660
- CLI PTBFR+4,0 ANY FILETYPE? 1.3 00011670
- BE GTFDUN NO, FINISHED 1.3 00011680
- ICM R4,7,PTBFR+5 GET FT TOKEN ADR 00011690
- IC R5,PTBFR+4 AND LENGTH 00011700
- LA R1,8 00011710
- MVCL R0,R4 COPY WITH PADDING 00011720
- GTFDUN TM FLG2,XXFMN FM NUMBER SPECIFIED? 1.3 00011730
- BO GTFOPN YES, FINE 1.3 00011740
- ICM R2,15,REBBUF NO, SEE IF REBLOCK SPECIFIED 1.3 00011750
- BZ GTFOPN NO, USE DEFAULT 1.3 00011760
- MVI OUTFM+1,C'4' YES, SWITCH TO FM 4 1.3 00011770
- GTFOPN L R2,OUTBUFF RESTORE 1.3 00011780
- FSCLOSE FSCB=OUT CLOSE THE OUTPUT FILE 00011790
- TM FLG2,XXAPP APPENDING TO PREVIOUS FILE? 1.2 00011800
- BOR R8 YES, ALL SET 1.2 00011810
- FSERASE FSCB=OUT NO, ERASE THE OUTPUT FILE 00011820
- BR R8 00011830
- FCHAR TRT 0(,R3),TRT FIND DOT 00011840
- *---------------------------------------------------------------------- 00011850
- * EXIT ROUTINE FOR DCB OPEN, ALSO USED BY TAPE SETUP 00011860
- * ASSUME ALL USUAL BASE REGISTERS 00011870
- *---------------------------------------------------------------------- 00011880
- SPACE 1 00011890
- DCBEXIT2 DS 0H 00012160
- ST R14,DCBR14 SAVE RETURN ADDRESS 00012170
- LH R0,DCBLRECL LOAD RECORD LENGTH 00012180
- LH R15,DCBBLKSI LOAD BLOCKSIZE 00012190
- TM DCBRECFM,DCBRECU UNDEFINED LENGTH BLOCKS? 00012200
- BNM DCBRECUV YES, OR MAYBE UNKNOWN 00012210
- TM DCBRECFM,DCBRECV VARYING LENGTH BLOCKS? 00012220
- BO DCBRECUV YES 00012230
- MVI OUTFV,C'F' SET FIXED LENGTH OUTPUT 00012240
- LTR R15,R15 ANY BLOCKSIZE? 00012250
- BH DCB1 YES 00012260
- LTR R15,R0 USE THE RECORD LENGTH 00012270
- BNH DCBERR ERROR IF BOTH UNSPECIFIED 00012280
- STH R15,DCBBLKSI SAVE IN DCB 00012290
- B DCBOK CONTINUE 00012300
- DCB1 DS 0H 00012310
- LTR R0,R0 ANY RECORD LENGTH? 00012320
- BH DCB2 YES 00012330
- LR R0,R15 USE THE BLOCKSIZE 00012340
- STH R0,DCBLRECL SAVE IN DCB 00012350
- DCB2 DS 0H 00012360
- SR R14,R14 CLEAR FOR DIVIDE 00012370
- DR R14,R0 GET BLOCKING FACTOR 00012380
- MR R14,R0 GET BLKSIZE AS CORRECT MULTIPLE 00012390
- STH R15,DCBBLKSI 00012400
- B DCBOK RETURN FROM THIS EXIT 00012410
- DCBRECUV DS 0H 00012420
- MVI OUTFV,C'V' SET VARYING LENGTH OUTPUT 00012430
- LA R14,4 LOAD BDW/RDW LENGTH 00012440
- CR R0,R14 TEST LRECL 00012450
- BH DCB4 OK 00012460
- LR R0,R15 MAKE LRECL = BLKSIZE 00012470
- SR R0,R14 SUBTRACT L'BDW 00012480
- STH R0,DCBLRECL STORE IN DCB 00012490
- DCB4 DS 0H 00012500
- CR R15,R14 TEST BLKSIZE 00012510
- BH DCB5 OK 00012520
- LR R15,R0 MAKE BLKSIZE = LRECL 00012530
- AR R15,R14 ADD L'BDW 00012540
- STH R15,DCBBLKSI STORE IN DCB 00012550
- DCB5 DS 0H 00012560
- TM DCBRECFM,DCBRECDU RECFM=D? 00012570
- BO DCB6 YES, CHECK LRECL 00012580
- TM DCBRECFM,DCBRECSB SPANNED RECORDS? 00012590
- BO DCBVS NO CONECTION BETWEEN LRECL AND BLKSIZE 00012600
- TM DCBRECFM,DCBRECU RECFM=U? 00012610
- BO DCBVS NO NEED FOR LRECL 00012620
- DCB6 AR R0,R14 GET LRECL + 4 00012630
- CR R0,R15 COMPARE WITH BLKSIZE 00012640
- BNH DCBOK FINE 00012650
- DCBERR DS 0H 00012660
- OI FLG,XXERR INDICATE BAD DCB AT OPEN TIME 00012670
- B DCBOK RETURN AND BOMB OUT 00012680
- DCBVS DS 0H 00012690
- MVI OUTFM+1,C'4' SET FILEMODE = 4 IF SPANNED 00012700
- DCBOK DS 0H 00012710
- L R14,DCBR14 RESTORE RETURN ADDRESS 00012720
- BR R14 RETURN TO DMSSOP 00012730
- SPACE 1 00012740
- *---------------------------------------------------------------------- 00012890
- * M E S S A G E S 00012900
- *---------------------------------------------------------------------- 00012910
- SPACE 1 00012920
- NOTTAP DS 0H 00012925
- ERR001 DS 0H 00012930
- LINEDIT TEXT='SPROSC771E MISSING TAPE ID',DISP=ERRMSG,DOT=NO 00012940
- LA R15,771 RC = 771 00012960
- B EXIT RETURN 00012970
- ERR003 DS 0H 1.3 00012980
- LINEDIT TEXT='SPROSC773E REBLOCK SIZE TOO SMALL', 1.3+00012990
- DISP=ERRMSG,DOT=NO 1.3 00013000
- LA R15,773 RC = 773 1.3 00013010
- B EXIT RETURN 1.3 00013020
- ERR083 DS 0H 00013030
- LINEDIT TEXT='SPROSC083E MISSING FILEID',DISP=ERRMSG,DOT=NO 00013040
- LA R15,083 RC = 083 00013050
- B EXIT RETURN 00013060
- ERR098 DS 0H 00013070
- LINEDIT TEXT='SPROSC098E ILLEGAL PARAMETER ''........''', +00013080
- SUB=(CHARA,0(R3)),DISP=ERRMSG,DOT=NO 00013090
- LA R15,098 RC = 098 00013100
- B EXIT RETURN 00013110
- ERR071 DS 0H 00013220
- LINEDIT TEXT='SPROSC071E UNKNOWN OPTION ''........''', +00013230
- SUB=(CHARA,(R3)),DISP=ERRMSG,DOT=NO 00013240
- LA R15,071 RC = 071 00013250
- B EXIT RETURN 00013260
- ERR095 DS 0H 00013270
- LINEDIT TEXT='SPROSC095E NO VALUE SUPPLIED FOR ''........'' OP+00013280
- TION',SUB=(CHARA,(R6)),DISP=ERRMSG,DOT=NO 00013290
- LA R15,095 00013300
- B OPTERRZ RETURN 00013310
- ERR308 LINEDIT TEXT='SPROSC308E ILLEGAL ........ VALUE ''........''',+00013320
- SUB=(CHARA,(R6),CHARA,8(R3)),DISP=ERRMSG,DOT=NO,RENT=NO 00013330
- LA R15,308 00013340
- B OPTERRZ RETURN 00013350
- ERR340 LINEDIT TEXT='SPROSC340E INCONSISTENT OPTION ''........''', +00013360
- SUB=(CHARA,(R6)),DISP=ERRMSG,DOT=NO 00013370
- LA R15,340 00013380
- OPTERRZ DS 0H 00013390
- TM FLG,XXLAB TAPE LABEL IN PROGRESS 00013400
- BZ EXIT NO, JUST RETURN 00013410
- ERR009 DS 0H 00013420
- LINEDIT TEXT='SPROSC779E INVALID TAPE LABELS', +00013430
- DISP=ERRMSG,DOT=NO 00013440
- LA R15,779 RETURN CODE 00013450
- B ERREXIT FREE BUFFER, THEN RETURN 00013460
- ERR014 DS 0H 00013470
- LINEDIT TEXT='SPROSC784E MISSING OR EMPTY FILE ON INPUT TAPE',+00013480
- DISP=ERRMSG,DOT=NO 00013490
- LA R15,784 RETURN CODE 00013500
- B ERREXIT FREE BUFFER, THEN RETURN 00013510
- CKVOLSER MVC LABVOL,0(R4) COPY ACTUAL VOLUME NAME 00013520
- CLI VOLUME,C' ' VERIFICATION OF SERIAL REQUESTED? 00013530
- BER R8 NO 00013540
- CLC VOLUME,0(R4) YES, CHECK IT 00013550
- BER R8 OK 00013560
- LINEDIT TEXT='SPROSC785E VOLUME LABEL ''......'' DOES NOT MATC+00013570
- H ''VOLID ......'' OPTION',DISP=ERRMSG,DOT=NO,RENT=NO, +00013580
- SUB=(CHARA,(R4),CHARA,VOLUME) 00013590
- LA R15,785 RETURN CODE 00013600
- B ERREXIT FREE BUFFER, THEN RETURN 00013610
- ERR016 DS 0H 00013620
- LINEDIT TEXT='SPROSC786E DSNAME ''.................'' DOES NOT+00013630
- MATCH ''DSN .................'' OPTION',DISP=ERRMSG, +00013640
- SUB=(CHARA,TAPDSN,CHARA,DSN),DOT=NO,RENT=NO 00013650
- LA R15,786 RETURN CODE 00013660
- B ERREXIT FREE BUFFER, THEN RETURN 00013670
- ERR017 DS 0H 00013680
- LINEDIT TEXT='SPROSC787E DSNAME VALUE LONGER THAN 44 BYTES', +00013690
- DISP=ERRMSG,DOT=NO 00013700
- LA R15,787 RETURN CODE 00013710
- B EXIT 00013720
- ERR018 LINEDIT TEXT='SPROSC788E SPANNED OR INVALID RECORD FOUND IN IN+00013730
- PUT FILE',DISP=ERRMSG,DOT=NO 00013740
- LA R15,788 RETURN CODE 00013750
- B ERREXIT 00013760
- ERR019R L R2,OUTBUFF RESTORE BUFFER PTR 00013770
- ERR019 LINEDIT TEXT='SPROSC789E NO DSN/FID AVAILABLE FOR INPUT FILE',+00013780
- DISP=ERRMSG,DOT=NO 00013790
- LA R15,789 00013800
- ERREXIT ST R15,RETC ... AND STORE 00013810
- B CLOSE2 FREE BUFFER, THEN RETURN 00013820
- ERR283 LINEDIT TEXT='SPROSC283E INSUFFICIENT STORAGE FOR BUFFERS',DOT+00013830
- =NO,DISP=ERRMSG 00013840
- LA R15,283 00013850
- B EXIT 00013860
- SPACE 1 00013870
- *-------------------------------------------------- OPTION LOOKUP TABLE 00013880
- * FORM: C'OPTION',AL1(MIN LENGTH - 1),AL3(PROCESSOR) 00013890
- OPTTAB1 DC C'RECFM ',X'4',AL3(RECFM) 00013900
- DC C'FORMAT ',X'1',AL3(RECFM) 00013910
- DC C'BLOCK ',X'1',AL3(BLKSIZE) 00013920
- DC C'BLKSIZE ',X'4',AL3(BLKSIZE) 00013930
- DC C'LRECL ',X'4',AL3(LRECL) 00013940
- DC C'REBLOCK ',X'2',AL3(REBLOCK) 1.3 00013950
- DC C'ASCII ',X'2',AL3(ASCII) 00013960
- DC C'EBCDIC ',X'2',AL3(EBCDIC) 00013970
- DC C'PREFIX ',X'2',AL3(PREFIX) 1.4 00013975
- DC C'FILE ',X'3',AL3(TFILE) 00013980
- DC C'NL ',X'1',AL3(NLTP) 00013990
- OPTSL DC C'SL ',X'1',AL3(SLTP) 00014000
- DC C'EOT ',X'2',AL3(RPTALL) 1.1 00014010
- DC C'EOF ',X'2',AL3(RPTNUM) 1.1 00014020
- DC C'VOLUME ',X'2',AL3(VOLSER) 00014030
- DC C'VOLID ',X'4',AL3(VOLSER) 00014040
- OPTTAB2 EQU * 00014050
- DC C'DSNAME ',X'2',AL3(DSNAME) 00014060
- LOPTTAB EQU *-OPTTAB2 00014070
- SPACE 1 00014080
- *------------------------------------------------------LABEL TYPE TABLE 00014090
- LBTAB DC C'VOL12',AL1(TLV1-TL0,TLV2-TL0,0,0) 1.3 00014100
- DC C'HDR14',AL1(TLH1-TL0,TLH2-TL0,TLH2-TL0,TLH2-TL0) 1.3 00014110
- DC C'EOF14',AL1(TLE1-TL0,TLE2-TL0,TLE2-TL0,TLE2-TL0) 1.3 00014120
- LBTABZ DS 0X LAST ITEM IN TABLE 00014130
- DC C'EOV14',AL1(TLE1-TL0,TLE2-TL0,TLE2-TL0,TLE2-TL0) 1.3 00014140
- LLBT EQU *-LBTABZ ITEM LENGTH 00014150
- SPACE 1 00014160
- *----------------------------------------------------RECFM LOOKUP TABLE 00014170
- * FORM: C'OPTION',AL1(FORBIDDEN-BITS,BITS-TO-SET) 00014180
- RECFMA DC AL1(C' ',0,0) 00014190
- DC AL1(C'F',DCBRECU,DCBRECF) 00014200
- DC AL1(C'V',DCBRECU,DCBRECV) 00014210
- DC AL1(C'U',DCBRECU,DCBRECU) 00014220
- DC AL1(C'D',DCBRECU,DCBRECDU) 00014230
- DC AL1(C'A',DCBRECCC,DCBRECCA) 00014240
- DC AL1(C'M',DCBRECCC,DCBRECCM) 00014250
- DC AL1(C'R',DCBRECBR+DCBRECSB,DCBRECBR+DCBRECSB) 00014260
- DC AL1(C'B',DCBRECBR,DCBRECBR) 00014270
- RECFMB DC AL1(C'S',DCBRECSB,DCBRECSB) 00014280
- LRECFM EQU *-RECFMB LENGTH OF TABLE ENTRY 00014290
- SPACE 1 00014300
- *------------------------------------------------ DCB OPTIONS FROM TAPE 00014310
- TLBPRM DC CL8'RECFM' 00014320
- TLBRCF DC CL3' ',CL5' ' 00014330
- DC CL8'BLOCK' 00014340
- TLBBLK DC CL5' ',CL3' ' 00014350
- DC CL8'LRECL' 00014360
- TLBLRC DC CL5' ',CL3' ' 00014370
- DC X'FF' END OF 'OPTIONS' 00014380
- SPACE 1 00014390
- *---------------------------------------------- ASCII TRANSLATION TABLE 00014400
- ATOE DC X'00010203372D2E2F',X'1605250B0C0D0E0F' 00014410
- DC X'101112133C3D3226',X'18193F271C1D1E1F' 00014420
- DC X'405A7F7B5B6C507D',X'4D5D5C4E6B604B61' 00014430
- DC X'F0F1F2F3F4F5F6F7',X'F8F97A5E4C7E6E6F' 00014440
- DC X'7CC1C2C3C4C5C6C7',X'C8C9D1D2D3D4D5D6' 00014450
- DC X'D7D8D9E2E3E4E5E6',X'E7E8E9ADE0BD5F6D' 00014460
- DC X'7981828384858687',X'8889919293949596' 00014470
- DC X'979899A2A3A4A5A6',X'A7A8A9C04FD0A107' 00014480
- * (2ND HALF = 1ST) 00014490
- DC X'00010203372D2E2F',X'1605250B0C0D0E0F' 00014500
- DC X'101112133C3D3226',X'18193F271C1D1E1F' 00014510
- DC X'405A7F7B5B6C507D',X'4D5D5C4E6B604B61' 00014520
- DC X'F0F1F2F3F4F5F6F7',X'F8F97A5E4C7E6E6F' 00014530
- DC X'7CC1C2C3C4C5C6C7',X'C8C9D1D2D3D4D5D6' 00014540
- DC X'D7D8D9E2E3E4E5E6',X'E7E8E9ADE0BD5F6D' 00014550
- DC X'7981828384858687',X'8889919293949596' 00014560
- DC X'979899A2A3A4A5A6',X'A7A8A9C04FD0A107' 00014570
- SPACE 1 00014580
- *-------------------------------------------------------- MISCELLANEOUS 00014590
- STOPTR DS A PTR TO EXTRA STORAGE AREA 00014600
- SAVER14 DS A RETURN ADDRESS TO DMSITS 00014610
- EOBID DC X'61FFFF61' CMS SHORT BLOCK INDICATOR 00014620
- TRT DC 64X'00',X'FF',191X'00' TRT-FOR-BLANK MASK 00014630
- FINDCNT DC H'5' MAXIMUM ALLOWED RETRIES FOR LABELS 00014640
- SPACE 1 00014650
- DS 0F 00014680
- *--------------------------------------------------------------- TAPEIO 00014740
- TAPLIST DC CL8'TAPEIO' PLIST FOR TAPE READ 00014750
- TAPOPRN DC CL8'READ' READ (OR OTHER) CODE 00014760
- TAPDEV DS CL4 TAPN CODE 00014770
- DC X'00' DEN/BPI/TRTCH CODE 00014780
- TAPBUFF DS AL3 INPUT BUFFER ADDRESS 00014790
- TAPSIZE DC A(65535) MAX BLOCK LENGTH 00014800
- TAPNORD DC A(0) LENGTH ACTUALLY READ 00014810
- DC 8X'FF' FENCE 00014820
- SPACE 1 00014830
- *---------------------------------------------------------- AUX STORAGE 00014850
- STOR DSECT 00014860
- DCB DS XL96 DUMMY DCB 00014870
- * DCB QUANTITIES USED: 00014900
- DCBRECFM EQU DCB+36,1 RECORD FORMAT FLAGS: 00014910
- DCBRECU EQU X'C0' UNDEFINED 00014920
- DCBRECF EQU X'80' FIXED-LENGTH 00014930
- DCBRECV EQU X'40' VARYING 00014940
- DCBRECDU EQU X'E0' VARYING ASCII *** NOT STANDARD *** 00014950
- DCBRECCC EQU X'06' CARRIAGE CONTROL MASK 00014960
- DCBRECCA EQU X'04' AMERICAN STANDARD CC 00014970
- DCBRECCM EQU X'02' MACHINE CODE CC 00014980
- DCBRECBR EQU X'10' BLOCKED RECORDS 00014990
- DCBRECSB EQU X'08' SPANNED RECORDS 00015000
- DCBBLKSI EQU DCB+62,2 BLOCK SIZE 00015040
- DCBLRECL EQU DCB+82,2 LOGICAL RECORD LENGTH 00015050
- SPACE 1 00015060
- ZSTUF EQU * AREA TO ZERO 00015120
- SPACE 1 00015130
- *---------------------------------------------------------- OUTPUT FSCB 00015140
- OUT DS 0F 00015150
- OUTCOMM DS CL8 00015160
- OUTFN DS CL8 OUTPUT FILE ID 00015170
- OUTFT DS CL8 00015180
- OUTFM DS CL2,H 00015190
- OUTBUFF DS A BUFFER PTR 00015200
- OUTSIZE DS F DATA LENGTH 00015210
- OUTFV DS C RECFM 00015220
- OUTFLG DS X'20' EPL 00015230
- OUTNORD DS F BYTES READ 00015240
- OUTAITN DS F'0' WRITE NEXT 00015250
- OUTANIT DS F NUMBER OF RECORDS TO WRITE 00015260
- OUTWPTR DS F'0' WRITE PTR 00015270
- OUTRPTR DS F'0' READ PTR 00015280
- SPACE 1 00015290
- *---------------------------------------------------------------- FLAGS 00015300
- FLG DS X FLAGS 00015310
- XXERR EQU X'40' ERROR IN DCB CHECKING 00015330
- XXLAB EQU X'20' READING FROM TAPE LABEL 00015340
- XXTSL EQU X'10' STANDARD LABEL TAPE 00015350
- XXOPN EQU X'08' DCB IS CHECKED AND OK 00015360
- XX1ST EQU X'04' 1ST RECORD DONE 00015370
- XXPM2 EQU X'02' FILE ID SPECIFIED 00015380
- XXPM1 EQU X'01' DDNAME/TAPN SPECIFIED 00015390
- SPACE 1 00015400
- FLG2 DS X MORE FLAGS 00015410
- XXEBC EQU X'80' ASCII TRANSLATION NOT NEEDED 00015420
- XXASC EQU X'40' ASCII TRANSLATION NEEDED 00015430
- XXFMN EQU X'20' USER GAVE FM NUMBER 1.1 00015440
- XXFMH EQU X'10' FM NUMBER FOUND IN HDR1 LABEL 1.1 00015450
- XXAPP EQU X'08' CONTINUING MULTI-REEL FILE 1.2 00015460
- XXMLT EQU X'01' BLKSIZE ERROR DETECTED 1.1 00015470
- SPACE 1 00015480
- CMDFMN DS C FILEMODE NUMBER SPECIFIED IN COMMAND 1.3 00015490
- *-------------------------------------------------------- MISCELLANEOUS 00015500
- DEC DS D TEMP FOR PACK 00015510
- RETC DS A COMMAND RETURN CODE 00015520
- RPTCNT DS F NUMBER OF FILES TO READ 1.1 00015530
- REBBUF DS A PTR TO REBLOCK BUFFER, OR ZERO IF NONE 1.3 00015540
- REBREC DS A PTR TO START OF CURRENT RECORD 1.3 00015550
- REBPTR DS A PTR TO NEXT SLOT IN BUFFER 1.3 00015560
- REBEND DS A PTR TO END OF BUFFER 1.3 00015570
- ZST2 EQU * STUFF TO ZERO FOR REPEAT PASS 00015580
- LFIL DS F TAPE FILE NUMBER 00015590
- DSNPTR DS F PTR TO DISK/TAPE DSN 00015600
- ZST2L EQU *-ZST2 00015610
- ZLEN EQU *-ZSTUF 00015620
- SPACE 1 00015630
- ADSN DS A POINTER TO LAST 17 BYTES OF DSN 00015640
- PRFSTR DS CL8 DSN SELECTION PREFIX 1.4 00015655
- DCBR14 DS A RETURN ADDRESS TO DMSSOP 00015660
- WRDRET DS F RETURN ADR SAVED DURING REBLOCKING 1.3 00015670
- REBDWDS DS F LENGTH OF REBLOCK BUFFER, IF ANY 1.3 00015680
- PTBFR DS XL8 PTRS TO TOKENS IN DSNAME 00015690
- PTBFL DS XL4 PTR TO LAST TOKEN (MUST FOLLOW PTBFR) 00015700
- SPNFLGS DS X BLOCK SPANNING FLAGS FOR REBLOCKING 1.3 00015710
- LABTYP DS CL4 TEMPORARY FOR TAPE LABEL SCAN 00015720
- DDNAME DS CL8 INPUT DDNAME 00015725
- * AREA TO BE INITIALIZED WITH BLANKS 00015730
- TAPDSN DS CL17,C DSNAME FIELD FROM 'HDR1' TAPE LABEL 00015740
- TAPGEN DS CL6 GENERATION NO. FROM 'HDR1' 00015750
- DSN DS CL44 DSNAME FOR VERIFICATION 00015760
- TAPFIL DS CL4,C UNPACKED FILE NUMBER FROM HEADER LABEL 00015770
- VOLUME DS CL6 TAPE VOLUME SERIAL FOR VERIFICATION 00015780
- LABVOL DS CL6 SAVED VOLUME NAME FROM LABEL 00015790
- LINIT EQU *-TAPDSN-1 LENGTH TO CLEAR 00015800
- LSTOR EQU (*+8-STOR)/8 LENGTH OF STORAGE IN DWORDS 00015810
- SPACE 1 00015820
- NUCON , CMS PAGE 0 00015850
- REGEQU , SYMBOLIC REGISTER EQUATES 00015860
- END SPROSC 00015880
-